Tumbling, Sliding এবং Session Window এর উদাহরণ

Latest Technologies - অ্যাপাচি ফ্লিঙ্ক (Apache Flink) - Flink এর Window Mechanism | NCTB BOOK

Apache Flink-এ Tumbling, Sliding, এবং Session উইন্ডো খুবই গুরুত্বপূর্ণ, কারণ তারা স্ট্রিম ডেটা প্রসেসিংয়ে ডেটাকে গ্রুপ করে এবং নির্দিষ্ট সময় বা ইভেন্টের ভিত্তিতে ডেটার উপর অপারেশন চালাতে সাহায্য করে। নিচে প্রতিটি উইন্ডোর উদাহরণসহ ব্যাখ্যা দেয়া হলো।

1. Tumbling Window উদাহরণ

Tumbling Windows হলো একটি ফিক্সড-সাইজ উইন্ডো যা নির্দিষ্ট সময়ের জন্য ডেটা গ্রুপ করে এবং ওভারল্যাপ ছাড়াই কাজ করে। প্রতিটি উইন্ডো একটি নির্দিষ্ট সময় পর বন্ধ হয় এবং পরবর্তী উইন্ডো শুরু হয়।

উদাহরণ:

ধরা যাক, আমাদের একটি স্ট্রিম আছে যেখানে আমরা প্রতি ১০ সেকেন্ডে ডেটা প্রসেস করতে চাই। আমরা TumblingEventTimeWindows ব্যবহার করে প্রতিটি ১০ সেকেন্ডের উইন্ডোতে ডেটা গ্রুপ করবো।

import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows;

public class TumblingWindowExample {
    public static void main(String[] args) throws Exception {
        // Execution Environment তৈরি করা
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        
        // Data Stream পড়া
        DataStream<String> stream = env.socketTextStream("localhost", 9999);

        // Tumbling Window ব্যবহার করে প্রসেসিং
        stream
            .map(value -> new Event(value))
            .keyBy(event -> event.getKey())
            .window(TumblingEventTimeWindows.of(Time.seconds(10))) // ১০ সেকেন্ডের উইন্ডো
            .sum("value") // 'value' ফিল্ডের উপর অপারেশন
            .print();

        env.execute("Tumbling Window Example");
    }
}
  • ব্যাখ্যা:
    • TumblingEventTimeWindows.of(Time.seconds(10)) দিয়ে ১০ সেকেন্ডের একটি ফিক্সড উইন্ডো তৈরি করা হয়েছে।
    • প্রতিটি উইন্ডো তার সময় শেষ হলে ডেটা প্রসেস করবে এবং পরবর্তী উইন্ডো শুরু হবে।

2. Sliding Window উদাহরণ

Sliding Windows হলো এমন উইন্ডো যা একটি নির্দিষ্ট ইন্টারভাল ধরে উইন্ডো স্লাইড করে। এতে উইন্ডোগুলো ওভারল্যাপ করতে পারে। Sliding উইন্ডোতে একটি উইন্ডোর দৈর্ঘ্য এবং স্লাইড করার ইন্টারভাল নির্ধারণ করতে হয়।

উদাহরণ:

ধরা যাক, আমাদের ১৫ সেকেন্ডের একটি উইন্ডো দরকার যা প্রতি ৫ সেকেন্ডে স্লাইড করবে।

import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.streaming.api.windowing.assigners.SlidingEventTimeWindows;

public class SlidingWindowExample {
    public static void main(String[] args) throws Exception {
        // Execution Environment তৈরি করা
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        
        // Data Stream পড়া
        DataStream<String> stream = env.socketTextStream("localhost", 9999);

        // Sliding Window ব্যবহার করে প্রসেসিং
        stream
            .map(value -> new Event(value))
            .keyBy(event -> event.getKey())
            .window(SlidingEventTimeWindows.of(Time.seconds(15), Time.seconds(5))) // ১৫ সেকেন্ডের উইন্ডো, ৫ সেকেন্ডের স্লাইড
            .sum("value") // 'value' ফিল্ডের উপর অপারেশন
            .print();

        env.execute("Sliding Window Example");
    }
}
  • ব্যাখ্যা:
    • SlidingEventTimeWindows.of(Time.seconds(15), Time.seconds(5)) দিয়ে ১৫ সেকেন্ডের উইন্ডো তৈরি করা হয়েছে, যা প্রতি ৫ সেকেন্ডে স্লাইড করে।
    • প্রতিটি উইন্ডো ওভারল্যাপ করবে, তাই একটি ইভেন্ট একাধিক উইন্ডোতে থাকতে পারে।

3. Session Window উদাহরণ

Session Windows হলো এমন উইন্ডো যা ইভেন্টের inactivity gap বা session gap এর উপর নির্ভর করে। দুটি ইভেন্টের মধ্যে একটি নির্দিষ্ট সময়ের বেশি গ্যাপ থাকলে নতুন উইন্ডো শুরু হয়।

উদাহরণ:

ধরা যাক, আমাদের একটি স্ট্রিম রয়েছে এবং আমরা চাই যে যদি দুটি ইভেন্টের মধ্যে ৩০ সেকেন্ডের বেশি গ্যাপ থাকে, তাহলে একটি নতুন সেশন উইন্ডো শুরু হবে।

import org.apache.flink.streaming.api.windowing.assigners.EventTimeSessionWindows;

public class SessionWindowExample {
    public static void main(String[] args) throws Exception {
        // Execution Environment তৈরি করা
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        
        // Data Stream পড়া
        DataStream<String> stream = env.socketTextStream("localhost", 9999);

        // Session Window ব্যবহার করে প্রসেসিং
        stream
            .map(value -> new Event(value))
            .keyBy(event -> event.getKey())
            .window(EventTimeSessionWindows.withGap(Time.seconds(30))) // ৩০ সেকেন্ডের সেশন গ্যাপ
            .sum("value") // 'value' ফিল্ডের উপর অপারেশন
            .print();

        env.execute("Session Window Example");
    }
}
  • ব্যাখ্যা:
    • EventTimeSessionWindows.withGap(Time.seconds(30)) ব্যবহার করে ৩০ সেকেন্ডের inactivity gap ভিত্তিতে সেশন উইন্ডো তৈরি করা হয়েছে।
    • যদি দুটি ইভেন্টের মধ্যে ৩০ সেকেন্ডের বেশি গ্যাপ থাকে, তাহলে একটি নতুন সেশন শুরু হবে এবং সেই সেশনের ডেটা প্রসেস করা হবে।

উপসংহার

  • Tumbling Windows: ফিক্সড সময়ের জন্য ডেটা গ্রুপ করে এবং প্রতিটি উইন্ডো আলাদা হয়।
  • Sliding Windows: নির্দিষ্ট সময়ের জন্য ডেটা গ্রুপ করে কিন্তু একটি উইন্ডো নির্দিষ্ট সময়ের ইন্টারভালে স্লাইড করে এবং ওভারল্যাপ করতে পারে।
  • Session Windows: ইভেন্টের মধ্যে গ্যাপ বা ইনঅ্যাকটিভ সময়ের উপর নির্ভর করে ডেটা গ্রুপ করে এবং একটি নতুন উইন্ডো শুরু করে।

এই উইন্ডো মেকানিজমগুলো স্ট্রিম ডেটা প্রসেসিং এবং real-time analytics অ্যাপ্লিকেশনের জন্য অত্যন্ত কার্যকরী, যা Flink-কে একটি শক্তিশালী স্ট্রিম প্রসেসিং টুল হিসেবে প্রমাণ করে।

Promotion